home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / epsilon / setuphelper.py < prev    next >
Text File  |  2009-09-17  |  3KB  |  79 lines

  1. # -*- test-case-name: epsilon.test.test_setuphelper -*-
  2.  
  3. # For great justice, take off every zig.
  4. import sys, os, pprint, traceback
  5.  
  6. from distutils.core import setup
  7.  
  8. def pluginModules(moduleNames):
  9.     from twisted.python.reflect import namedAny
  10.     for moduleName in moduleNames:
  11.         try:
  12.             yield namedAny(moduleName)
  13.         except ImportError:
  14.             pass
  15.         except ValueError, ve:
  16.             if ve.args[0] != 'Empty module name':
  17.                 traceback.print_exc()
  18.         except:
  19.             traceback.print_exc()
  20.  
  21. def _regeneratePluginCache(pluginPackages):
  22.     print 'Regenerating cache with path: ',
  23.     pprint.pprint(sys.path)
  24.     from twisted import plugin
  25.     for pluginModule in pluginModules([
  26.         p + ".plugins" for p in pluginPackages]):
  27.         # Not just *some* zigs, mind you - *every* zig:
  28.         print 'Full plugin list for %r: ' % (pluginModule.__name__)
  29.         pprint.pprint(list(plugin.getPlugins(plugin.IPlugin, pluginModule)))
  30.  
  31. def regeneratePluginCache(dist, pluginPackages):
  32.     if 'install' in dist.commands:
  33.         sys.path.insert(0, os.path.abspath(dist.command_obj['install'].install_lib))
  34.         _regeneratePluginCache(pluginPackages)
  35.  
  36. def autosetup(**kw):
  37.     packages = []
  38.     datafiles = {}
  39.     pluginPackages = []
  40.  
  41.     for (dirpath, dirnames, filenames) in os.walk(os.curdir):
  42.         dirnames[:] = [p for p in dirnames if not p.startswith('.')]
  43.         pkgName = dirpath[2:].replace('/', '.')
  44.         if '__init__.py' in filenames:
  45.             # The current directory is a Python package
  46.         if 'build' not in dirpath:
  47.                 packages.append(pkgName)
  48.         elif 'plugins' in dirnames:
  49.             # The current directory is for the Twisted plugin system
  50.             pluginPackages.append(pkgName)
  51.             packages.append(pkgName)
  52.  
  53.     for package in packages:
  54.         if '.' in package:
  55.             continue
  56.         D = datafiles[package] = []
  57.         print 'Files in package %r:' % (package,)
  58.         pprint.pprint(os.listdir(package))
  59.         for (dirpath, dirnames, filenames) in os.walk(package):
  60.             dirnames[:] = [p for p in dirnames if not p.startswith('.')]
  61.             for filename in filenames:
  62.                 if filename == 'dropin.cache':
  63.                     continue
  64.                 if (os.path.splitext(filename)[1] not in ('.py', '.pyc', '.pyo')
  65.                     or '__init__.py' not in filenames):
  66.                     D.append(os.path.join(dirpath[len(package)+1:], filename))
  67.     autoresult = {
  68.         'packages': packages,
  69.         'package_data': datafiles,
  70.         }
  71.     print 'Automatically determined setup() args:'
  72.     pprint.pprint(autoresult, indent=4)
  73.     assert 'packages' not in kw
  74.     assert 'package_data' not in kw
  75.     kw.update(autoresult)
  76.     distobj = setup(**kw)
  77.     regeneratePluginCache(distobj, pluginPackages)
  78.     return distobj
  79.